﻿using Autofac;
using System;
using TestBLLImpl;
using TestIBll;

namespace IocTest
{
    class Program
    {
        /**
         * 使用AutoFac 实现IOC
         * 概念：
         * 1.容器：管理程序中所有组件的结构（简单的说：管理程序中所有接口的实现类）
         * 2.生命周期：实例冲创建到释放所持续的时间
         * 3.注册：添加和配置组件到容器的行为
         * 4.作用域：一个特定的上下文一个特定的上下文在其中组件的实例将会被其他组件 以据他们 的服务 所共享
         * 5.解析服务：创建对用接口的类
         */
        static void Main(string[] args)
        {
            //1.创建容器的建造者
            ContainerBuilder builder = new ContainerBuilder();
            //2.注册组件UserBll，并把服务IUserBll暴漏给该组件UserBll,创建一个单例组件
            builder.RegisterType<UserBll>().As<IUserBll>().SingleInstance();
            //3.创建容器
            IContainer container = builder.Build(Autofac.Builder.ContainerBuildOptions.None);
            //4.使用容器解析服务，创建实例（不推荐）
            #region 使用容器解析服务
            //IUserBll userBll = container.Resolve<IUserBll>();
            //IUserBll userBll1 = container.Resolve<IUserBll>();
            //Console.WriteLine(ReferenceEquals(userBll, userBll1));
            //userBll.Login("翟超", "123456");
            #endregion
            #region 使用生命周期解析服务，创建实例
            using(ILifetimeScope scope = container.BeginLifetimeScope())
            {
                //scope.re
            }
            #endregion
            Console.WriteLine("Hello World!");
        }
    }
}
